package com.zzw.springboot.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zzw.springboot.bean.Inventory;
import com.zzw.springboot.bean.SysUser;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 库存DAO接口
 */
public interface InventoryMapper extends BaseMapper<Inventory> {
    /**
     * 添加库存记录
     * @param inventory 库存信息
     * @return 影响行数
     */
    int insertInventory(Inventory inventory);

    /**
     * 更新库存信息
     * @param inventory 库存信息
     * @return 影响行数
     */
    int updateInventory(Inventory inventory);

    /**
     * 增加库存数量
     * @param productId 商品ID
     * @param warehouseId 仓库ID
     * @param quantity 增加数量
     * @return 影响行数
     */
    int increaseQuantity(@Param("productId") Integer productId, @Param("warehouseId") Integer warehouseId, @Param("quantity") Integer quantity);

    /**
     * 减少库存数量
     * @param productId 商品ID
     * @param warehouseId 仓库ID
     * @param quantity 减少数量
     * @return 影响行数
     */
    int decreaseQuantity(@Param("productId") Integer productId, @Param("warehouseId") Integer warehouseId, @Param("quantity") Integer quantity);

    /**
     * 锁定库存数量
     * @param productId 商品ID
     * @param warehouseId 仓库ID
     * @param quantity 锁定数量
     * @return 影响行数
     */
    int lockQuantity(@Param("productId") Integer productId, @Param("warehouseId") Integer warehouseId, @Param("quantity") Integer quantity);

    /**
     * 解锁库存数量
     * @param productId 商品ID
     * @param warehouseId 仓库ID
     * @param quantity 解锁数量
     * @return 影响行数
     */
    int unlockQuantity(@Param("productId") Integer productId, @Param("warehouseId") Integer warehouseId, @Param("quantity") Integer quantity);

    /**
     * 设置库存预警阈值
     * @param productId 商品ID
     * @param warehouseId 仓库ID
     * @param alertThreshold 预警阈值
     * @return 影响行数
     */
    int updateAlertThreshold(@Param("productId") Integer productId, @Param("warehouseId") Integer warehouseId, @Param("alertThreshold") Integer alertThreshold);

    /**
     * 根据商品ID和仓库ID查询库存
     * @param productId 商品ID
     * @param warehouseId 仓库ID
     * @return 库存信息
     */
    Inventory selectInventoryByProductAndWarehouse(@Param("productId") Integer productId, @Param("warehouseId") Integer warehouseId);

    /**
     * 查询库存列表（带条件）
     * @param inventory 查询条件
     * @return 库存列表
     */
    List<Inventory> selectInventoryList(Inventory inventory);

    /**
     * 查询库存预警列表（库存数量低于预警阈值）
     * @return 库存预警列表
     */
    List<Inventory> selectAlertList();

    /**
     * 更新最后盘点时间
     * @param productId 商品ID
     * @param warehouseId 仓库ID
     * @return 影响行数
     */
    int updateLastCheckTime(@Param("productId") Integer productId, @Param("warehouseId") Integer warehouseId);
}
